/**
 * @Created by WebStorm
 * @author: TRT
 * @desc wx.request二次封装实现统一响应、异常处理
 *
 */
import APIConfig from "../config/api";
import exceptionMessage from "../config/execption-message";
import wxToPromise from "./wx";

class Http {
    // url: trt.com
    // /token

    // V1 yuansheng
    /*static request({url,data,method='GET'}){
        wx.request({
            url:APIConfig.baseUrl + url,
            data,
            method,
            success: (res) => {
                console.log(res)
                // 全局的统一响应、异常处理
                //TODO 请求成功
                if (res.statusCode < 400) {
                    return res.data.data
                }

                //TODO 请求失败
                if (res.statusCode === 401) {
                   //TODO 令牌相关操作
                    return
                }

                // 接口错误信息，一定要看清楚文档，哪些适合直接展示出去，哪些不适合
                // 微信支付账户余额不足  不适合展示出去
                Http._showError(res.data.error_code, res.data.message)
            }
        })
    }*/

    // v2 回调han shu
    /*static request({url,data,method='GET'}, callback){
        wx.request({
            url:APIConfig.baseUrl + url,
            data,
            method,
            success: (res) => {
                console.log(res)
                // 全局的统一响应、异常处理
                //TODO 请求成功
                if (res.statusCode < 400) {
                    console.log(res.data.data)
                    callback(res.data.data)
                    //return res.data.data
                }

                //TODO 请求失败
                if (res.statusCode === 401) {
                    //TODO 令牌相关操作
                    return
                }

                // 接口错误信息，一定要看清楚文档，哪些适合直接展示出去，哪些不适合
                // 微信支付账户余额不足  不适合展示出去
                Http._showError(res.data.error_code, res.data.message)
            }
        })
    }*/

    // v3 Promise jie jue hui diao di yu
    /*static request({url,data,method='GET'}){

        const res = wxToPromise('request', {
            url:APIConfig.baseUrl + url,
            data,
            method,
        })

        return res.then((res) => {
            //console.log(res)
            // 全局的统一响应、异常处理
            //TODO 请求成功
            if (res.statusCode < 400) {
                //console.log(res.data.data)
                //callback(res.data.data)
                return res.data.data
            }

            //TODO 请求失败
            if (res.statusCode === 401) {
                //TODO 令牌相关操作
                return
            }

            // 接口错误信息，一定要看清楚文档，哪些适合直接展示出去，哪些不适合
            // 微信支付账户余额不足  不适合展示出去
            Http._showError(res.data.error_code, res.data.message)
        })
    }*/

    // v4 Generator xiaochengxu bu chi chi Generator; shi yong asyn await (Promise and Generator jie he ti)
    static async request({url,data,method='GET'}){

        const res = await wxToPromise('request', {
            url:APIConfig.baseUrl + url,
            data,
            method,
        })

        // 全局的统一响应、异常处理
        //TODO 请求成功
        if (res.statusCode < 400) {
            //console.log(res.data.data)
            //callback(res.data.data)
            return res.data.data
        }

        //TODO 请求失败
        if (res.statusCode === 401) {
            //TODO 令牌相关操作
            return
        }

        // 接口错误信息，一定要看清楚文档，哪些适合直接展示出去，哪些不适合
        // 微信支付账户余额不足  不适合展示出去
        Http._showError(res.data.error_code, res.data.message)
    }

    static _showError(errorCode, message){
        console.log(errorCode)
        let title = ''
        const errorMessage = exceptionMessage[errorCode]
        title = errorMessage || message || '未知异常'

        title = typeof title === 'object'
            ? Object.values(title).join(';')
            : title

        console.log(errorMessage)
        wx.showToast({
            title,
            icon: 'none',
            duration: 3000,
        })
    }
}

export default Http
